

package Persistencia;

import Clases.Cliente;
import Clases.FacturacionCliente;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 
 * @author Fabián
 */
public class PersistenciaFacturacionCliente {

    public static int insertarFacturacionCliente(FacturacionCliente facturacioncliente) {

        int insertado = 0;

        String codigoCliente = null;
        Cliente cliente = facturacioncliente.getCliente();
        String nombre = facturacioncliente.getNombre();
        String direccion = facturacioncliente.getDireccion();
        String codigoPostal = facturacioncliente.getCodigoPostal();
        String movil = facturacioncliente.getMovil();
        String email = facturacioncliente.getEmail();
        String nif = facturacioncliente.getNif();
        String telefono1 = facturacioncliente.getTelefono1();
        String telefono2 = facturacioncliente.getTelefono2();
        String fax = facturacioncliente.getFax();
        String personaContacto = facturacioncliente.getPersonaContacto();
        String observacion = facturacioncliente.getObservacion();
        String localidad = facturacioncliente.getLocalidad();
        String provincia = facturacioncliente.getProvincia();
        int estado = facturacioncliente.getEstado();

        Connection con = null;
        Statement st = null;
        boolean existe = false;

        try {
            List<FacturacionCliente> facturacionclientes = obtenerFacturacionesCliente(cliente);

            for (FacturacionCliente fc : facturacionclientes) {
                if (facturacioncliente.getCliente().getCodigoCliente().equals(fc.getCliente().getCodigoCliente()) && facturacioncliente.getNif().equals(fc.getNif())) {
                    existe = true;
                    // devuelvo 3 para mostrar el mensaje de que ya existe ese nif para ese cliente
                    insertado = 3;
                }
            }

            con = Conexion.getConexion();
            if (!existe) {
               String sql = "insert into facturacionescliente (codigocliente, nombre, direccion, provincia, localidad, cp, nif, movil,"
                        + "email, telefono1, telefono2, fax, observacion, personacontacto, estado)"
                        + " values ('" + cliente.getCodigoCliente() + "', '" + nombre + "','" + direccion + "', '"
                        + provincia + "', '" + localidad + "', '" + codigoPostal + "', '" + nif + "', '"
                        + movil + "', '" + email + "', '" + telefono1 + "', '" + telefono2 + "', '"
                        + fax + "', '" + observacion + "', '" + personaContacto + "'," + estado + ");";

                
                st = con.createStatement();
                insertado = st.executeUpdate(sql);
            }
        } catch (Exception e) {
            System.out.println("Error al insertar facturación del cliente \n\n" + e.getMessage());
        } finally {
            Conexion.cerrarConexion(con);
        }

        return insertado;
    }

    public static FacturacionCliente obtenerFacturacionCliente(String codigoCliente, String nif) {

        Cliente cliente = null;
        Connection con = null;
        Statement st = null;
        ResultSet rs = null;
        FacturacionCliente fc = null;

        String sql = "select * from facturacionescliente where codigocliente = '" + codigoCliente + "' and nif = '" + nif + "'";
        //String sql2 = "select * from cliente where codigo = '" + codigoCliente + "'";

        try {
            con = Conexion.getConexion();
            st = con.createStatement();
            rs = st.executeQuery(sql);
            
            if (rs.next()) {
                fc = new FacturacionCliente(PersistenciaCliente.obtenerCliente(codigoCliente), codigoCliente, rs.getString("nombre"), nif, 
                        rs.getString("email"), rs.getString("personacontacto"), rs.getString("movil"), rs.getString("telefono1"), 
                        rs.getString("telefono2"),rs.getString("fax"),rs.getString("direccion"),rs.getString("provincia"),
                        rs.getString("localidad"), rs.getString("cp"), rs.getString("observacion"),   rs.getInt("estado"));
            }
            rs.close();
            st.close();
        } catch (Exception e) {
            System.out.println("Error al cargar al cliente " + e.getMessage());
        } finally {
            Conexion.cerrarConexion(con);
        }
        return fc;
    }

    public static List<FacturacionCliente> obtenerFacturacionesCliente(Cliente cliente) {

        List<FacturacionCliente> listaFacturaciones = new ArrayList();
        Connection con = null;
        Statement st = null;
        ResultSet rs = null;
        FacturacionCliente fc = null;

        String sql = "select * from facturacionescliente where codigocliente = '" + cliente.getCodigoCliente() + "'";

        try {
            con = Conexion.getConexion();
            st = con.createStatement();
            rs = st.executeQuery(sql);
            while (rs.next()) {
                fc = obtenerFacturacionCliente(cliente.getCodigoCliente(), rs.getString("nif"));
                listaFacturaciones.add(fc);
            }
            rs.close();
            st.close();
        } catch (Exception e) {
            System.out.println("Error al obtener la lista de facturaciones del cliente" + e.getMessage());
        } finally {
            Conexion.cerrarConexion(con);
        }
        return listaFacturaciones;
    }

    public static int modificarFacturacionCliente(FacturacionCliente c, String nifBD) {
        Connection con = null;
        Statement st = null;
        
        int ret = 0;
        boolean existe = false;
        
        List<FacturacionCliente> facturacionclientes = obtenerFacturacionesCliente(c.getCliente());

            for (FacturacionCliente fc : facturacionclientes) {
                if (fc.equals(c)) {
                    existe = true;
                    // devuelvo 3 para mostrar el mensaje de que ya existe ese nif para ese cliente
                    ret = 3;
                }
            }


       
        try {
             con = Conexion.getConexion();
            if(!existe){
                 String sql = "update facturacionescliente set "
                    + "nombre =  '" + c.getNombre() + "', "
                    + "direccion = '" + c.getDireccion() + "', "
                    + "cp = '" + c.getCodigoPostal() + "', "
                    + "movil = '" + c.getMovil() + "', "
                    + "email = '" + c.getEmail() + "', "
                    + "nif =  '" + c.getNif() + "', "
                    + "telefono1 = '" + c.getTelefono1() + "', "
                    + "telefono2 = '" + c.getTelefono2() + "', "
                    + "fax = '" + c.getFax() + "', "
                    + "personacontacto = '" + c.getPersonaContacto() + "', "
                    + "observacion = '" + c.getObservacion() + "', "
                    + "localidad = '" + c.getLocalidad() + "', "
                    + "provincia = '" + c.getProvincia() + "', "
                    + "estado = " + c.getEstado() + " "
                    + "where codigoCliente = '" + c.getCodigoCliente() + "' "
                    + " and nif='"+ nifBD +"';";
               
                st = con.createStatement();
                ret = st.executeUpdate(sql);
            }
        } catch (Exception e) {
            System.out.println("Error al modificar cliente" + e.getMessage());
        } finally {
            Conexion.cerrarConexion(con);
        }
        
        return ret;
    }

    public static void bajaCliente(Cliente cliente) {

        Connection con = null;
        Statement st = null;
        ResultSet rs = null;
        SimpleDateFormat formato = new SimpleDateFormat("dd-MM-yyyy");
        String fecha = formato.format(new Date());

        String sql = "update cliente set estado = " + cliente.getEstado() + ", fechaBaja =  '" + fecha + "',"
                + " where codigo = '" + cliente.getCodigoCliente() + "';";
        try {
            con = Conexion.getConexion();
            st = con.createStatement();
            st.executeUpdate(sql);

        } catch (Exception e) {
            System.out.println("Error al modificar cliente" + e.getMessage());
        } finally {
            Conexion.cerrarConexion(con);
        }
    }

    public static List<FacturacionCliente> obtenerTodasFacturaciones() {
        List<FacturacionCliente> listaFacturaciones = new ArrayList();
        Connection con = null;
        Statement st = null;
        ResultSet rs = null;
        FacturacionCliente fc = null;

        String sql = "select * from facturacionescliente";

        try {
            con = Conexion.getConexion();
            st = con.createStatement();
            rs = st.executeQuery(sql);
            while (rs.next()) {
                fc = obtenerFacturacionCliente(rs.getString("codigocliente"),rs.getString("nif"));
                listaFacturaciones.add(fc);
            }
            rs.close();
            st.close();
        } catch (Exception e) {
            System.out.println("Error al obtener la lista de facturaciones del cliente" + e.getMessage());
        } finally {
            Conexion.cerrarConexion(con);
        }
        return listaFacturaciones;        
    }


}
